package cn.edu.neu.lab603.cloudeval.strategy

import cn.edu.neu.lab603.cloudeval.entity.{CloudTask, DataCenter, VirtualMachine}

/**
  * Created by yfwz100 on 16/9/12.
  */
trait AllocationStrategy {

  /** 初始化物理机集群状态。
    */
  def initDataCenterLayout(dataCenter: DataCenter)

  /** 为给定的用户需求分配一个虚拟机。
    *
    * @param dataCenter 数据中心对象
    * @param cloudlet 用户需求
    * @return 虚拟机实例
    */
  def allocateVMForCloudlet(cloudlet: CloudTask, dataCenter: DataCenter): VirtualMachine

  /** 取消虚拟机的分配。
    *
    * @param dataCenter 数据中心对象
    * @param cloudlet   用户需求
    */
  def deallocateVMForCloudlet(cloudlet: CloudTask, dataCenter: DataCenter)
}
